R Markdown

This is an R Markdown document. Markdown is a simple formatting syntax for authoring HTML, PDF, and MS Word documents. For more details on using R Markdown see http://rmarkdown.rstudio.com.

When you click the Knit button a document will be generated that includes both content as well as the output of any embedded R code chunks within the document. You can embed an R code chunk like this:

data = bgg.orginal %>%
  filter(
    # Removes observations that are incorrectly recorded
    min_players<=max_players, # The maximum number of recommended players cannot logically be less than the minimum number of recommended players
    min_time<=max_time, # The maximum estimated play time cannot logically be less than the minimum estimated play time
    between(weight, 1, 5), # Weight is calculated by averaging votes from a scale of 1-5, thus we remove observations where the weight is less than 1 or greater than 5.
    # Removes "games" that stand in as miscellaneous categories for the data; These are not board games; They only act as generalized placeholders and thus are irrelevant to our analysis
    names!="Unpublished Prototype", 
    names!="Miscellaneous Game Accessory", 
    names!="Traditional Card Games", 
    names!="Outside the Scope of BGG"
    ) %>%  
  select(!c(bgg_url, game_id, image_url, designer)) %>%  # The url variables cannot be used in a data analysis, and game_id & designer are not relevant to our data analysis
  rename(Rank=rank,Name=names,Min_Players=min_players,Max_Players=max_players,Avg_Time=avg_time,Min_Time=min_time,Max_Time=max_time,Year_Pubd=year,Avg_Rating=avg_rating,Geek_Rating=geek_rating,Num_Votes=num_votes,Min_Age=age,mechanics=mechanic,Num_Owned=owned,categories=category,Complexity=weight) # Renames variables to accurately reflect their utility
# Based on the data source, values of 0 for the following variables indicate that the publisher did not provide data or that data for the variable was unavailable; Since the data is numeric, a "0" entry might be misconstrued as an acceptable value, thus we convert 0 to NA to properly reflect this.
data$Min_Players = replace(data$Min_Players, data$Min_Players==0, NA) # 0 players cannot play a game; this is missing data
data$Max_Players = replace(data$Max_Players, data$Max_Players==0, NA) # 0 players cannot play a game; this is missing data
data$Min_Age = replace(data$Min_Age, data$Min_Age==0, NA) # Someone who is 0 years old cannot play a game; this is missing data
data$Year_Pubd = replace(data$Year_Pubd, data$Year_Pubd==0, NA) # These games have no confirmed initial publication date; this is unavailable data
#Making new categories
activity_cat = c("CityBuilding","Civilization","Educational","Maze","PartyGame","Puzzle","PikeandShot","Print&Play","Racing","TerritoryBuilding","Transportation")
component_cat = c("CardGame","CollectibleComponents","Dice","Electronic","Miniatures")
non_game_cat = c("AbstractStrategy","Book","ExpansionforBase-game","GameSystem")
wargames_cat = c("Wargame","WorldWarI","WorldWarII","VietnamWar","Napoleonic","ModernWarfare","CivilWar","AmericanCivilWar","Post-Napoleonic","AmericanRevolutionaryWar","AmericanIndianWars","KoreanWar")
skills_cat = c("Action/Dexterity","Bluffing","Deduction","Economic","Math","Medical","Number","Memory","Negotiation","Real-time","Trivia","WordGame")
entertainment_media_cat = c("ComicBook/Strip","Movies/TV/Radiotheme","Music","Novel-based","Political","Sports","VideoGameTheme")
thematic_cat=c("Adventure","AgeofReason","AmericanWest","Ancient","Animals","Arabian","Aviation/Flight","Children'sGame","Environmental","Exploration","Fantasy","Farming","Fighting","Horror","Humor","Industry/Manufacturing","Mafia","Mature/Adult","Medieval","Murder/Mystery","Mythology","Nautical","Pirates","Prehistoric","Religious","Renaissance","ScienceFiction","SpaceExploration","Spies/SecretAgents","Trains","Travel","Zombies")
#Making new mechanics
ip_mech = c("VariablePlayerPowers","Co-operativePlay","Partnerships","PlayerElimination","RolePlaying","Trading","Action/MovementProgramming","Voting","Acting","Singing")
resource_mech = c("SetCollection","ActionPointAllowanceSystem","Auction/Bidding","WorkerPlacement","Pick-upandDeliver","StockHolding","CommoditySpeculation ","Betting/Wagering")
card_mech = c("HandManagement","CardDrafting","Deck/PoolBuilding","Campaign/BattleCardDriven","TakeThat","Trick-taking")
spacetime_mech = c("DiceRolling","AreaControl/AreaInfluence","ModularBoard","TilePlacement","Hex-and-Counter","AreaMovement","GridMovement","PointtoPointMovement","Route/NetworkBuilding","PatternBuilding","Roll/SpinandMove","AreaEnclosure","TimeTrack","Area-Impulse","CrayonRailSystem")
strategy_mech = c("SimultaneousActionSelection","Simulation","PressYourLuck","SecretUnitDeployment","Memory","VariablePhaseOrder","PatternRecognition","Storytelling","Chit-PullSystem","Paper-and-Pencil","Rock-Paper-Scissors","LineDrawing")
data = data %>% 
  mutate("Activity_Game"=F,
         "Component_Game"=F,
         "Non-Game"=F,
         "Wargame"=F,
         "Skill_Game"=F,
         "Entertainment_Media_Game"=F,
         "Thematic_Game"=F,
         "Interpersonal_Mechanic"=F,
         "Resource_Mechanic"=F,
         "Card_Mechanic"=F,
         "Space-Time_Mechanic"=F,
         "Abstract_Strategy_Mechanic"=F)
for (i in 1:nrow(data)) {
  #Categories
  if(str_contains(str_contains(str_replace_all(data$categories[i]," ",""),activity_cat),TRUE)) {
    data$Activity_Game[i]=T
  }
  if(str_contains(str_contains(str_replace_all(data$categories[i]," ",""),component_cat),TRUE)) {
    data$Component_Game[i]=T
  }
  if(str_contains(str_contains(str_replace_all(data$categories[i]," ",""),non_game_cat),TRUE)) {
    data$`Non-Game`[i]=T
  }
  if(str_contains(str_contains(str_replace_all(data$categories[i]," ",""),wargames_cat),TRUE)) {
    data$Wargame[i]=T
  }
  if(str_contains(str_contains(str_replace_all(data$categories[i]," ",""),skills_cat),TRUE)) {
    data$Skill_Game[i]=T
  }
  if(str_contains(str_contains(str_replace_all(data$categories[i]," ",""),entertainment_media_cat),TRUE)) {
    data$Entertainment_Media_Game[i]=T
  }
  if(str_contains(str_contains(str_replace_all(data$categories[i]," ",""),thematic_cat),TRUE)) {
    data$Thematic_Game[i]=T
  }
  #Mechanics
  if(str_contains(str_contains(str_replace_all(data$mechanics[i]," ",""),ip_mech),TRUE)) {
    data$Interpersonal_Mechanic[i]=T
  }
  if(str_contains(str_contains(str_replace_all(data$mechanics[i]," ",""),resource_mech),TRUE)) {
    data$Resource_Mechanic[i]=T
  }
  if(str_contains(str_contains(str_replace_all(data$mechanics[i]," ",""),card_mech),TRUE)) {
    data$Card_Mechanic[i]=T
  }
  if(str_contains(str_contains(str_replace_all(data$mechanics[i]," ",""),spacetime_mech),TRUE)) {
    data$`Space-Time_Mechanic`[i]=T
  }
  if(str_contains(str_contains(str_replace_all(data$mechanics[i]," ",""),strategy_mech),TRUE)) {
    data$Abstract_Strategy_Mechanic[i]=T
  }
}
data = data %>%
  select(!categories) %>% 
  select(!mechanics)
glimpse(data)
## Rows: 4,934
## Columns: 26
## $ Rank                       <dbl> 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, …
## $ Name                       <chr> "Gloomhaven", "Pandemic Legacy: Season 1", …
## $ Min_Players                <dbl> 1, 2, 2, 2, 1, 2, 2, 1, 2, 2, 2, 2, 1, 2, 1…
## $ Max_Players                <dbl> 4, 4, 4, 2, 5, 4, 5, 5, 2, 4, 4, 4, 7, 5, 5…
## $ Avg_Time                   <dbl> 150, 60, 240, 180, 120, 240, 150, 115, 30, …
## $ Min_Time                   <dbl> 90, 60, 180, 120, 120, 180, 60, 90, 30, 75,…
## $ Max_Time                   <dbl> 150, 60, 240, 180, 120, 240, 150, 115, 30, …
## $ Year_Pubd                  <dbl> 2017, 2015, 2015, 2005, 2016, 2016, 2012, 2…
## $ Avg_Rating                 <dbl> 9.01310, 8.66575, 8.65702, 8.35188, 8.38331…
## $ Geek_Rating                <dbl> 8.52234, 8.49837, 8.32401, 8.21012, 8.17328…
## $ Num_Votes                  <dbl> 9841, 23489, 10679, 29923, 20468, 11779, 27…
## $ Min_Age                    <dbl> 12, 13, 14, 13, 12, 14, 12, 14, 10, 12, 12,…
## $ Num_Owned                  <dbl> 18217, 38105, 14147, 41094, 26145, 18673, 3…
## $ Complexity                 <dbl> 3.7720, 2.8056, 4.3538, 3.5446, 3.2465, 3.6…
## $ Activity_Game              <lgl> FALSE, FALSE, TRUE, FALSE, TRUE, FALSE, TRU…
## $ Component_Game             <lgl> TRUE, FALSE, TRUE, FALSE, FALSE, TRUE, FALS…
## $ `Non-Game`                 <lgl> FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, F…
## $ Wargame                    <lgl> FALSE, FALSE, FALSE, TRUE, FALSE, TRUE, FAL…
## $ Skill_Game                 <lgl> FALSE, TRUE, TRUE, FALSE, TRUE, FALSE, TRUE…
## $ Entertainment_Media_Game   <lgl> FALSE, FALSE, FALSE, TRUE, FALSE, TRUE, FAL…
## $ Thematic_Game              <lgl> TRUE, TRUE, FALSE, FALSE, TRUE, TRUE, TRUE,…
## $ Interpersonal_Mechanic     <lgl> TRUE, TRUE, FALSE, FALSE, TRUE, TRUE, TRUE,…
## $ Resource_Mechanic          <lgl> FALSE, TRUE, TRUE, FALSE, FALSE, FALSE, FAL…
## $ Card_Mechanic              <lgl> TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, FALSE, …
## $ `Space-Time_Mechanic`      <lgl> TRUE, TRUE, FALSE, TRUE, TRUE, TRUE, TRUE, …
## $ Abstract_Strategy_Mechanic <lgl> TRUE, FALSE, FALSE, TRUE, FALSE, FALSE, TRU…

#More Cleaning

data.1= data %>%
  na.omit()%>%
  mutate(Avg_Num_Players= round((Max_Players-Min_Players)/2, digits=0))%>% #create a variable for Avg_Num_Players
  filter(Year_Pubd>1500)%>% #excluding the games that were published before 1500, and therefore our models can only be used for the games that are published after 1500
  mutate(Duration= 2018-Year_Pubd+1)%>% #create a variable for duration
  select(., -c("Name")) #excluding the variable name
head(data.1)
## # A tibble: 6 × 27
##    Rank Min_Players Max_Players Avg_Time Min_Time Max_Time Year_Pubd Avg_Rating
##   <dbl>       <dbl>       <dbl>    <dbl>    <dbl>    <dbl>     <dbl>      <dbl>
## 1     1           1           4      150       90      150      2017       9.01
## 2     2           2           4       60       60       60      2015       8.67
## 3     3           2           4      240      180      240      2015       8.66
## 4     4           2           2      180      120      180      2005       8.35
## 5     5           1           5      120      120      120      2016       8.38
## 6     6           2           4      240      180      240      2016       8.50
## # … with 19 more variables: Geek_Rating <dbl>, Num_Votes <dbl>, Min_Age <dbl>,
## #   Num_Owned <dbl>, Complexity <dbl>, Activity_Game <lgl>,
## #   Component_Game <lgl>, Non-Game <lgl>, Wargame <lgl>, Skill_Game <lgl>,
## #   Entertainment_Media_Game <lgl>, Thematic_Game <lgl>,
## #   Interpersonal_Mechanic <lgl>, Resource_Mechanic <lgl>, Card_Mechanic <lgl>,
## #   Space-Time_Mechanic <lgl>, Abstract_Strategy_Mechanic <lgl>,
## #   Avg_Num_Players <dbl>, Duration <dbl>

#AVG_TIME

#Removing outliers 
Q <- quantile(data.1$Avg_Time, probs=c(.25, .75), na.rm = FALSE)
iqr <- IQR(data.1$Avg_Time)
up <-  Q[2]+1.5*iqr # Upper Range  
low<- Q[1]-1.5*iqr # Lower Range
data.avg.time<- subset(data.1, data.1$Avg_Time > (Q[1] - 1.5*iqr) & data.1$Avg_Time < (Q[2]+1.5*iqr))

data.avg.time.1= data.avg.time %>%
  select(.,-c( "Min_Time","Max_Time")) #excluding Min_Time & Max_Time since we are trying to predict Avg_Time
#Inspecting relationships
plot(Avg_Time~., data = data.avg.time.1)

#stepwise selection 
Full = lm(Avg_Time~., data = data.avg.time.1)
MSE = (summary(Full)$sigma)^2
none = lm(Avg_Time ~1, data= data.avg.time.1)
step_model=step(none, scope=list(upper=Full), scale=MSE, trace = FALSE)
summary(step_model)$adj.r.squared
## [1] 0.569625
#Backward elimination
back_model=step(Full, scale=MSE, trace = FALSE)
summary(back_model)$adj.r.squared
## [1] 0.5709816
# there is no  a big difference between the two, we continue with stepwise
#Graphing subsets (using stepwise selection) and the corresponding adj-r^2 for each set
ret.full <- regsubsets(Avg_Time~.,data=data.avg.time.1,nvmax=22)
## Warning in leaps.setup(x, y, wt = wt, nbest = nbest, nvmax = nvmax, force.in =
## force.in, : 1 linear dependencies found
sum.ret.full <- summary(ret.full)
sum.ret.full$rsq
##  [1] 0.5174180 0.5341860 0.5443838 0.5520836 0.5563290 0.5595015 0.5622489
##  [8] 0.5648786 0.5661493 0.5677297 0.5687937 0.5698834 0.5705846 0.5713521
## [15] 0.5720525 0.5727178 0.5728883 0.5730215 0.5731574 0.5732924 0.5733262
## [22] 0.5733351
plot(ret.full,scale='adjr2')

#Creating models with .54-.57  adj r^2:
Avg_Time_Mod1= lm(Avg_Time ~ Complexity +`Non-Game`+Component_Game +Min_Age+
                    Wargame+Entertainment_Media_Game +`Space-Time_Mechanic`+
                    Min_Players+Interpersonal_Mechanic+Resource_Mechanic+ 
                    Card_Mechanic  + Activity_Game+ Duration, data = data.avg.time.1)

Avg_Time_Mod2= lm(Avg_Time ~ Rank+Min_Players+Min_Age+Complexity+
                    Component_Game+`Non-Game`+Wargame+Skill_Game+Entertainment_Media_Game+
                    `Space-Time_Mechanic`+ Duration,data= data.avg.time.1)
Avg_Time_Mod3= lm(Avg_Time ~ Min_Players+Complexity+Component_Game+`Non-Game`+`Space-Time_Mechanic`,data= data.avg.time.1)

Avg_Time_Mod4= lm(Avg_Time ~Min_Players+Num_Votes+Min_Age+Complexity+Activity_Game+
                    Component_Game+`Non-Game`+Wargame+Entertainment_Media_Game+
                    Resource_Mechanic+Card_Mechanic+`Space-Time_Mechanic`,data= data.avg.time.1)
Avg_Time_Mod5= lm(Avg_Time ~Rank+Min_Players+Min_Age+Geek_Rating+Complexity+Activity_Game+
                    Component_Game+`Non-Game`+Wargame+Entertainment_Media_Game+
                    Resource_Mechanic+Card_Mechanic+`Space-Time_Mechanic`+Avg_Num_Players ,data= data.avg.time.1)

Avg_Time_Mod6= lm(Avg_Time ~Year_Pubd +Geek_Rating+Num_Votes+Min_Age+Num_Owned+Complexity+Activity_Game+
                    Component_Game+`Non-Game`+Wargame+Skill_Game+Entertainment_Media_Game+
                    Thematic_Game+Interpersonal_Mechanic+Resource_Mechanic+Card_Mechanic+
                    `Space-Time_Mechanic` ,data= data.avg.time.1)
Avg_Time_Mod7= lm(Avg_Time ~Min_Players+Max_Players+Year_Pubd+Avg_Rating+
                    Num_Votes+Min_Age+Num_Owned+Complexity+Activity_Game+
                    Component_Game+`Non-Game`+Wargame+Skill_Game+Entertainment_Media_Game+
                    Thematic_Game+Interpersonal_Mechanic+Resource_Mechanic+Card_Mechanic+
                    `Space-Time_Mechanic`,data= data.avg.time.1)
Avg_Time_Mod8= lm(Avg_Time ~Min_Players+Max_Players+Year_Pubd+Avg_Rating+
                    Min_Age+Complexity+Activity_Game+Component_Game+`Non-Game`+Wargame+
                    Skill_Game+Entertainment_Media_Game+Thematic_Game+Interpersonal_Mechanic+
                    Resource_Mechanic+Card_Mechanic+`Space-Time_Mechanic` ,data= data.avg.time.1)
Avg_Time_Mod9= lm(Avg_Time ~Min_Age+Complexity+Activity_Game+
                    `Non-Game`+Wargame+Entertainment_Media_Game+
                    Resource_Mechanic+Card_Mechanic+`Space-Time_Mechanic` ,data= data.avg.time.1)
Avg_Time_Mod10= lm(Avg_Time ~Min_Players+Min_Age+Complexity+
                    Component_Game+`Non-Game`,data= data.avg.time.1)
#Calculate the MAE for the 10 models,and create a table with the models' number and the coresponding MAEs, and adj r^2   
data.avg.time.2= data.avg.time.1%>% 
 add_predictions(Avg_Time_Mod1,var="Mod1")%>%
  add_predictions(Avg_Time_Mod2,var="Mod2")%>%
  add_predictions(Avg_Time_Mod3,var="Mod3")%>%
  add_predictions(Avg_Time_Mod4,var="Mod4")%>%
  add_predictions(Avg_Time_Mod5,var="Mod5")%>%
  add_predictions(Avg_Time_Mod6,var="Mod6")%>%
  add_predictions(Avg_Time_Mod7,var="Mod7")%>%
  add_predictions(Avg_Time_Mod8,var="Mod8")%>%
  add_predictions(Avg_Time_Mod9,var="Mod9")%>%
  add_predictions(Avg_Time_Mod10,var="Mod10")
  
  
Avg_time_Model_num= c(1:10)
Avg_time_MAE= c(MAE.func(data.avg.time.2$Avg_Time, data.avg.time.2$Mod1),
       MAE.func(data.avg.time.2$Avg_Time, data.avg.time.2$Mod2),
       MAE.func(data.avg.time.2$Avg_Time, data.avg.time.2$Mod3),
       MAE.func(data.avg.time.2$Avg_Time, data.avg.time.2$Mod4),
       MAE.func(data.avg.time.2$Avg_Time, data.avg.time.2$Mod5),
       MAE.func(data.avg.time.2$Avg_Time, data.avg.time.2$Mod6),
       MAE.func(data.avg.time.2$Avg_Time, data.avg.time.2$Mod7),
       MAE.func(data.avg.time.2$Avg_Time, data.avg.time.2$Mod8),
       MAE.func(data.avg.time.2$Avg_Time, data.avg.time.2$Mod9),
       MAE.func(data.avg.time.2$Avg_Time, data.avg.time.2$Mod10))
Avg_time_adjR= c(summary(Avg_Time_Mod1)$adj.r.squared, 
        summary(Avg_Time_Mod2)$adj.r.squared,
        summary(Avg_Time_Mod3)$adj.r.squared,
        summary(Avg_Time_Mod4)$adj.r.squared,
        summary(Avg_Time_Mod5)$adj.r.squared,
        summary(Avg_Time_Mod6)$adj.r.squared,
        summary(Avg_Time_Mod7)$adj.r.squared,
        summary(Avg_Time_Mod8)$adj.r.squared,
        summary(Avg_Time_Mod9)$adj.r.squared,
        summary(Avg_Time_Mod10)$adj.r.squared)
avg.time.Final= data.frame(Avg_time_Model_num, Avg_time_MAE,Avg_time_adjR )
avg.time.Final
##    Avg_time_Model_num Avg_time_MAE Avg_time_adjR
## 1                   1     16.76076     0.5687468
## 2                   2     16.85368     0.5657726
## 3                   3     17.17756     0.5495719
## 4                   4     16.80095     0.5676799
## 5                   5     16.79341     0.5679941
## 6                   6     16.78509     0.5682809
## 7                   7     16.74561     0.5692668
## 8                   8     16.75734     0.5688422
## 9                   9     16.99522     0.5589256
## 10                 10     17.09282     0.5527875

#AVG_RATING

#Removing outliers 
Q2 <- quantile(data.1$Avg_Rating, probs=c(.25, .75), na.rm = FALSE)
iqr2 <- IQR(data.1$Avg_Rating)
data.avg.rating<- subset(data.1, data.1$Avg_Rating > (Q2[1] - 1.5*iqr2) & data.1$Avg_Rating < (Q2[2]+1.5*iqr2))
data.avg.rating.1= data.avg.rating %>%
  select(.,-c( "Geek_Rating")) 
#Inspecting relationships
plot(Avg_Rating~., data = data.avg.rating.1)

#stepwise selection 
Full_rating = lm(Avg_Rating~., data = data.avg.rating.1)
MSE_rating = (summary(Full_rating)$sigma)^2
none_rating = lm(Avg_Rating ~1, data= data.avg.rating.1)
step_model_rating=step(none_rating, scope=list(upper=Full_rating), scale=MSE_rating, trace = FALSE)
summary(step_model)$adj.r.squared
## [1] 0.569625
#Graphing subsets (using stepwise selection) and the corresponding adj-r^2 for each set
ret.full2 <- regsubsets(Avg_Rating~.,data=data.avg.rating.1,nvmax=22)
## Warning in leaps.setup(x, y, wt = wt, nbest = nbest, nvmax = nvmax, force.in =
## force.in, : 2 linear dependencies found
## Reordering variables and trying again:
sum.ret.full2 <- summary(ret.full2)
sum.ret.full2$rsq
##  [1] 0.2874193 0.4213577 0.4363141 0.4548188 0.4631443 0.4693492 0.4762436
##  [8] 0.4785884 0.4800510 0.4812125 0.4822758 0.4834550 0.4844673 0.4853979
## [15] 0.4861244 0.4867994 0.4874470 0.4879353 0.4883713 0.4884741 0.4885531
## [22] 0.4886108 0.4886255
plot(ret.full2,scale='adjr2')

#Creating models with the heighst adj r^2:
Avg.rating.Mod1= lm(Avg_Rating ~ Complexity + Rank + Duration + Wargame + 
    Thematic_Game + Min_Age + Min_Players + Interpersonal_Mechanic + 
    `Space-Time_Mechanic` + Num_Votes + Abstract_Strategy_Mechanic + 
    Num_Owned + Resource_Mechanic + Entertainment_Media_Game + 
    Min_Time + Avg_Time + Component_Game, 
    data = data.avg.rating.1)
Avg.rating.Mod2= lm(Avg_Rating ~Rank+Min_Players+Max_Players +Min_Time+Max_Time+Year_Pubd+
           Num_Votes+Min_Age+Num_Owned+Complexity+Activity_Game+
           `Non-Game`+Skill_Game+Entertainment_Media_Game+Thematic_Game+
           Interpersonal_Mechanic+Resource_Mechanic+Card_Mechanic+
           Abstract_Strategy_Mechanic+Avg_Num_Players ,data= data.avg.rating.1)
Avg.rating.Mod3=lm(Avg_Rating ~Rank+Min_Players+
           Num_Votes+Num_Owned+Activity_Game+Skill_Game+
           Interpersonal_Mechanic+Duration ,data= data.avg.rating.1)
Avg.rating.Mod4= lm(Avg_Rating ~Rank+Min_Players+Max_Players+Min_Time+Max_Time+
           Num_Votes+Min_Age+Num_Owned+Complexity+Activity_Game+
           Skill_Game+Thematic_Game+Interpersonal_Mechanic+Resource_Mechanic+Card_Mechanic+
           Abstract_Strategy_Mechanic+Avg_Num_Players ,data= data.avg.rating.1)
Avg.rating.Mod5= lm(Avg_Rating ~Rank+Skill_Game+
           Interpersonal_Mechanic+Duration ,data= data.avg.rating.1)
#Calculate the MAE for the 5 models,and create a table with the models' number, the corresponding MAEs, and adj r^2   
data.avg.rating.2= data.avg.rating.1%>% 
 add_predictions(Avg.rating.Mod1,var="Mod1")%>%
  add_predictions(Avg.rating.Mod2,var="Mod2")%>%
  add_predictions(Avg.rating.Mod3,var="Mod3")%>%
  add_predictions(Avg.rating.Mod4,var="Mod4")%>%
  add_predictions(Avg.rating.Mod5,var="Mod5")
  
  
  
Avg_rating_Model_num= c(1:5)
Avg_rating_MAE= c(MAE.func(data.avg.rating.2$Avg_Rating, data.avg.rating.2$Mod1),
       MAE.func(data.avg.rating.2$Avg_Rating, data.avg.rating.2$Mod2),
       MAE.func(data.avg.rating.2$Avg_Rating, data.avg.rating.2$Mod3),
       MAE.func(data.avg.rating.2$Avg_Rating, data.avg.rating.2$Mod4),
       MAE.func(data.avg.rating.2$Avg_Rating, data.avg.rating.2$Mod5))
Avg_rating_adjR= c(summary(Avg.rating.Mod1)$adj.r.squared, 
        summary(Avg.rating.Mod2)$adj.r.squared,
        summary(Avg.rating.Mod3)$adj.r.squared,
        summary(Avg.rating.Mod4)$adj.r.squared,
        summary(Avg.rating.Mod2)$adj.r.squared)
avg.rating.Final= data.frame(Avg_rating_Model_num, Avg_rating_MAE,Avg_rating_adjR )
avg.rating.Final
##   Avg_rating_Model_num Avg_rating_MAE Avg_rating_adjR
## 1                    1      0.3009473       0.4844101
## 2                    2      0.3038696       0.4761728
## 3                    3      0.3705607       0.2522501
## 4                    4      0.3100063       0.4588023
## 5                    5      0.3794632       0.4761728